#ifndef OPTIONS_HPP_
# define OPTIONS_HPP_

# include <string>
# include <iostream>
# include "Utils/macros.hpp"

/*! Simple command line parser */
class Options {
public:
  /*! Destructor */
  ~Options();

  /*! Singleton - Get the unique instance of the class
   * \return a reference on the unique instance
   */
  static Options &GetInstance();
  /*! Parse the given arguments
   * \param argc : number of arguments
   * \param argv : array of arguments
   */
  void ParseParameters(int argc, char *argv[]);

  /*! Get a string containing the `Usage' message */
  std::string GetUsage() const;

  /*! Get cooking time multiplier */
  double GetCookingTime() const;
  /*! Get coocks per kitchen */
  unsigned int GetCooksPerKitchen() const;
  /*! Get stocks refill time */
  unsigned int GetStocksRefillTime() const;

private:
  /* Private constructor */
  Options();
  /*! Disallow copy constructor and assignment operator */
  DISALLOW_COPY_AND_ASSIGN(Options);

  /*! Convert a string to an integer
   * \param string : the string to convert
   * \return the converted integer
   */
  int GetIntegerFromString(const std::string &string) const;
  /*! Convert a string to a double
   * \param string : the string to convert
   * \return the converted double
   */
  double GetDoubleFromString(const std::string &string) const;

  double mCookingTime; /*!< Cooking time */
  unsigned int mCooksPerKitchen; /*!< Cooks per kitchen */
  unsigned int mStocksRefillTime; /*!< Stocks refill time */
};

#endif /* !OPTIONS_HPP_ */
